本系列文章會在筆者的部落格繼續連載!Design System 101 感謝大家的閱讀!
因為先前都還沒有介紹 CSS 的設置,本來想在 Button 組件實作時一起來入,但發現時間太緊迫了,所以本篇只介紹所有相關 CSS 的設置!
在 Token to CSS 這篇,我們最終產出了屬於符合自身 Design System 需求的 CSS,其包含了所有的基本設定,像是 Reference Token, System Token 以及一些基本的 Style。
而我們也在先前的章節提到,在開發時我們可以透過 Storybook 來呈現組件的各種狀態,以便在開發或 Demo 時可以快速的預覽組件的樣式。
先在 Storybook 建立 preview-head.html
|__ .storybook
    |__ preview-head.html
    ...
在來透過 preview-head.html 來載入我們的 CSS
// .storybook/preview-head.html
<link href="https://cdn.jsdelivr.net/npm/@tocino-ui/design-tokens/dist/normalize/normalize.css" rel="stylesheet" />
接著當開啟 Storybook 時,就可以看到 stylesheet 已經被載入,並且 :root 中已經有所有先前定義好的 Design Token (CSS Variable)。

以下設定可以參考筆者的 Github - @tocino-ui/css
|__ packages
|   |__ css
|   |   |__ src
|   |   |__ script
|   |__ package.json
|   |__ postcss.config.json
接著我們來安裝一些主要的套件,首先我們需要安裝 postcss 與其相關套件, postcss 提供許多的 Plugin 來幫助我們處理 CSS,從幫加入 prefix 提升網站兼容係到幫處理 SCSS 等等。
pnpm i -D postcss autoprefixer postcss-import postcss-scss @csstools/postcss-sass
autoprefixer: 自動在你的 CSS 中添加適當的前綴。@csstools/postcss-sass: 可以使用 postcss 來處理 Sass 檔案。postcss-scss: 讓 postcss 可以解析 SCSS 語法的工具。postcss-import: 可以在你的 CSS 或 SCSS 中使用 @import 語句來導入其他樣式檔。該 script 主要就是用來處理 CSS 的設定,以下是筆者的設定!
const autoprefixer = require('autoprefixer');
const sass = require('@csstools/postcss-sass');
const scss = require('postcss-scss');
const scssImport = require('postcss-import');
const { join } = require('path');
module.exports = {
  map: {
    sourcesContent: false, // 不要產生 sourcemap
    annotation: true, // 產生註解
  },
  customSyntax: scss, // 使用 scss 語法
  parser: scss,
  plugins: [
    scssImport,
    sass({
      includePaths: [join(__dirname, 'node_modules')],
      outputStyle: process.env.CSS_MINIFY === '0' ? 'expanded' : 'compressed',
    }),
    autoprefixer,
  ],
};
最後再透過該 config 引入 build.js 腳本,透過此腳本就可以產生我們最終所需要的 CSS 檔案,並且在組件中引入。
// button.tsx
import 'ui/css/dist/button.css';
// your code
現在我們已經有了一個 Design System 的雛形,從最初的 /components 建立,到現在 /css 整體架構如下:
|__ packages
|   |__ components // 組件庫
|   |__ css // 所有組件 CSS 相關的設定
|   |__ design-tokens // 所有視覺元素以及基礎 Styling 的設定
|   |__ core // 核心共用的邏輯
而開發時我們可以透過 turbo 來同時啟動相關的 Packages
turbo run dev -- --watch

下篇將實作 Button 組件!